package com.risk.management.service;

import com.risk.management.entity.ProjectMember;
import com.risk.management.entity.User;
import java.util.List;

/**
 * 项目成员服务接口
 */
public interface ProjectMemberService {
    /**
     * 根据ID查询项目成员
     * @param id 项目成员ID
     * @return 项目成员信息
     */
    ProjectMember getProjectMemberById(Long id);
    
    /**
     * 根据项目ID查询项目成员
     * @param projectId 项目ID
     * @return 项目成员列表
     */
    List<ProjectMember> getProjectMembersByProjectId(Long projectId);
    
    /**
     * 根据用户ID查询项目成员
     * @param userId 用户ID
     * @return 项目成员列表
     */
    List<ProjectMember> getProjectMembersByUserId(Long userId);
    
    /**
     * 根据项目ID查询项目成员用户
     * @param projectId 项目ID
     * @return 用户列表
     */
    List<User> getUsersByProjectId(Long projectId);
    
    /**
     * 根据项目ID和角色查询项目成员用户
     * @param projectId 项目ID
     * @param role 角色
     * @return 用户列表
     */
    List<User> getUsersByProjectIdAndRole(Long projectId, Integer role);
    
    /**
     * 检查用户是否是项目成员
     * @param projectId 项目ID
     * @param userId 用户ID
     * @return 是否是项目成员
     */
    boolean isMember(Long projectId, Long userId);
    
    /**
     * 添加项目成员
     * @param projectMember 项目成员信息
     * @return 是否成功
     */
    boolean addProjectMember(ProjectMember projectMember);
    
    /**
     * 批量添加项目成员
     * @param projectId 项目ID
     * @param userIds 用户ID列表
     * @param role 角色
     * @return 是否成功
     */
    boolean addProjectMembers(Long projectId, List<Long> userIds, Integer role);
    
    /**
     * 更新项目成员角色
     * @param id 项目成员ID
     * @param role 角色
     * @return 是否成功
     */
    boolean updateProjectMemberRole(Long id, Integer role);
    
    /**
     * 更新项目成员角色
     * @param projectId 项目ID
     * @param userId 用户ID
     * @param role 角色
     * @return 是否成功
     */
    boolean updateProjectMemberRole(Long projectId, Long userId, Integer role);
    
    /**
     * 删除项目成员
     * @param id 项目成员ID
     * @return 是否成功
     */
    boolean deleteProjectMember(Long id);
    
    /**
     * 删除项目成员
     * @param projectId 项目ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean deleteProjectMember(Long projectId, Long userId);
    
    /**
     * 删除项目所有成员
     * @param projectId 项目ID
     * @return 是否成功
     */
    boolean deleteProjectMembers(Long projectId);
} 